package com.itheima;

import java.util.Random;
import java.util.Scanner;

/**
 * @ClassName Test8_2zengjihong
 * @Author 16799
 * @Date 2025/6/20 10:14
 * @Version 1.0
 * @Description TODO
 * 自己写一遍双色球业务
 *
 * 注意：ok了
 *          我这样写有问题，这个无法遍历数组来对比，是否存在相同的数字，而是直接跳到return false了
 *             if (numbers[i]==number){
 *                 return true; //说明数组中存在相同的数字，需要重新生成或者输入
 *             }else {
 *                 break;
 *             }
 **/
public class Test8_2zengjihong {
    public static void main(String[] args) {

        int userNumbers[] = userSelectNumbers();
        System.out.println("您选中的双色球号码为：");
        printArray(userNumbers);

        int luckNumbers[] = createLuckNumbers();
        System.out.println("本次双色球中奖号码为：");
        printArray(luckNumbers);

        judge(userNumbers,luckNumbers);

    }

    //1、模拟双色球：随机一组中奖号码出来注意：
    //6个红球号码的范围是1-33之间，且不能重复；1个蓝球号码的范围在：1-16之间。
    //第一个方法，让用户手动投注，产生一注双色球彩票
    public static int[] userSelectNumbers(){
        int numbers[] = new int[7];
        Scanner sc = new Scanner(System.in);

        //只需要便利双色球号码的前六个红色号码
        for (int i = 0; i < numbers.length-1; i++) {

            while (true) {
                System.out.println("请您输入第" + (i + 1) + "个红球号码（要求在1-33之间，不能重复）：");
                int number = sc.nextInt();
                if (number<1 || number>33){
                    System.out.println("对不起，您输入的红球号码不在1-33之间，请确认！");
                }else {
                    //判断这个号码是否是重复的
                    if (exist(numbers,number)){
                        System.out.println("对不起，您当前输入的红球号码前面选择过，重复了，请确认！");
                    }else {
                        //输入的号码数字满足范围内，也满足唯一不重复
                        numbers[i]=number;
                        //输入了满足条件的号码，结束当前死循环
                        break;
                    }
                }
            }
        }

        //输入双色球的第七个蓝球号码
        while (true){
            System.out.println("请您输入最后1个蓝球号码（1-16）：");
            int number = sc.nextInt();
            if (number<1 || number>16){
                System.out.println("对不起，您输入的蓝球号码范围不对！");
            }else {
                numbers[6]=number;
                break; //最后一个蓝球号码输入正确，结束死循环
            }
        }
        return numbers;
    }


    //2、模拟双色球：随机一组中奖号码出来
    //第二个方法，由系统随机产生一注双色球彩票开奖号码
    public static int [] createLuckNumbers(){
        int numbers[] = new int[7];
        Random r = new Random();

        //数组的前六位遍历，并生成号码
        for (int i = 0; i < numbers.length-1; i++) {
            while (true) {
                int number = r.nextInt(1,34);
                if (!exist(numbers,number)){
                    numbers[i] = number;
                    break; // 结束当前死循环，继续便利数组生成下一个号码
                }
            }
        }

        //数组的第七位，也就是生成一个蓝球号码
        numbers[6] = r.nextInt(1,17);
        return numbers;
    }

    //3、模拟双色球-判断中奖情况
    //第三个方法，判断传入两组号码，用于判断彩票的中奖情况
    public static void judge(int userNumbers[] , int luckNumber[]){
        //记录红球和蓝球各命中多少个
        int redCount=0;
        int blueCount=0;

        //遍历用户输入的前六位的红球号码
        for (int i = 0; i < userNumbers.length-1; i++) {
            //遍历中奖号码的前六位
            for (int j = 0; j < luckNumber.length-1; j++) {
                if (userNumbers[i] == luckNumber[j]){
                    redCount++;
                    break;
                }
            }
        }

        blueCount = userNumbers[6]==luckNumber[6] ? 1:0;

        System.out.println("您命中的红球数量是：" + redCount);
        System.out.println("您命中的蓝球数量是：" + blueCount);

        // 4、判断中奖详情，并输出结果
        if(redCount == 6 && blueCount == 1){
            System.out.println("恭喜您，中奖1000万，可以开始享受人生了~~~");
        }else if(redCount == 6 && blueCount == 0){
            System.out.println("恭喜您，中奖500万，可以稍微开始享受人生了~~~");
        }else if(redCount == 5 && blueCount == 1){
            System.out.println("恭喜您，中奖3000元，可以出去吃顿小龙虾了~");
        }else if(redCount == 5 && blueCount == 0 || redCount == 4 && blueCount == 1){
            System.out.println("恭喜您，中了小奖：200元~");
        }else if(redCount == 4 && blueCount == 0 || redCount == 3 && blueCount == 1){
            System.out.println("中了10元~");
        }else if( redCount < 3 && blueCount == 1){
            System.out.println("中了5元~");
        }else {
            System.out.println("感谢您对福利事业做出的巨大贡献~~~");
        }
    }


    //4.判断该数字在数组中是否存在
    public static boolean exist(int numbers[],int number){
        for (int i = 0; i < numbers.length; i++) {

            if(numbers[i] == 0){
                break;
            }
            if(numbers[i] == number){
                return true;//说明数组中存在相同的数字，需要重新生成或者输入
            }

       /*    我这样写有问题，这个无法遍历数组来对比，是否存在相同的数字，而是直接跳到return false了
            if (numbers[i]==number){
                return true; //说明数组中存在相同的数字，需要重新生成或者输入
            }else {     //不需要加个else，因为需要遍历整个for循环，而不是只判断一个i的位置的数组值。重点是我要便利整个数组
            //加个else我便利第一个i=0位置，不不在相同的，那不是就要进入break了，数组其他位置的值不便利了吗
                break;
            }*/
        }
        return false;
    }

    //5.双色球号码存入在数组中，将数组中的数字打印出来
    public static void printArray(int arr[]){
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(i==arr.length-1? arr[i]:arr[i]+",");
        }
        System.out.println("]");
    }
}
